
using UnityEngine;
//追击状态
namespace Enemy
{
    public class ChaseState : IState
    {
        // 构造函数
        public ChaseState(FSM manager)
        {
            this.manager = manager;
            this.parameter = manager.parameter;
        }

        public override void OnEnter()
        {
            parameter.animator.Play("Run");
            parameter.currentSpeed = parameter.chaseSpeed;
        }

        public override void OnUpdate()
        {
            // 转换到死亡状态
            if (parameter.isDead)
            {
                manager.TransitionState(StateType.Death);
            }
            // 如果被击中了，转换到受击状态
            if (parameter.isHurt)
            {
                manager.TransitionState(StateType.Hit);
            }

            // 如果目标不存在或者超出追逐范围，则转换到空闲状态
            if (parameter.target == null)
            {
                manager.TransitionState(StateType.Idle);
            }

            // 如果检测到攻击范围内有目标，则转换到攻击状态
            if (Physics2D.OverlapCircle(parameter.attackPoint.position, parameter.attackArea, parameter.targetLayer))
            {
                manager.TransitionState(StateType.Attack);
            }

            if(parameter.target != null) manager.StartPath(parameter.target);
        }


        public override void OnFixedUpdate()
        {
            manager.FlipTo(parameter.target);    // 面向目标
            // 向目标位置移动
            if (parameter.target != null)
            {
                //移动到当前目标点
                manager.Move();
            }
        }

        public override void OnExit() { }
    }
}
